package muhnes.sizoo.dal;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Clase que abre las sessiones para todas las entidades del sistema
 * para que no se tenga que abrir varias veces en el proceso
 * @author  Todos Nelson Chicas, Ricardo Escobar, Oscar Castillo, Karen Medrano
 */
public class FabricaDAO {

    private FabricaDAO() {
    }
    
    public static SesionDao crearSesionDao() {
        return (SesionDao)crearDAO(SesionDaoImpl.class);
    }
    
    public static BitacoraDao crearBitacoraDao() {
        return (BitacoraDao)crearDAO(BitacoraDaoImpl.class);
    }
    
    public static UsuarioDao crearUsuarioDao() {
        return (UsuarioDao)crearDAO(UsuarioDaoImpl.class);
    }
    
    public static RolDao crearRolDao() {
        return (RolDao)crearDAO(RolDaoImpl.class);
    }
    
    public static PhylumDao crearPhylumDao() {
        return (PhylumDao)crearDAO(PhylumDaoImpl.class);
    }
    
    public static ClaseDao crearClaseDao() {
        return (ClaseDao)crearDAO(ClaseDaoImpl.class);
    } 
    
    public static OrdenDao crearOrdenDao() {
        return (OrdenDao)crearDAO(OrdenDaoImpl.class);
    } 
    
    public static SuperfamiliaDao crearSuperfamiliaDao() {
        return (SuperfamiliaDao)crearDAO(SuperfamiliaDaoImpl.class);
    } 
    
    public static FamiliaDao crearFamiliaDao() {
        return (FamiliaDao)crearDAO(FamiliaDaoImpl.class);
    } 
    
    public static GeneroDao crearGeneroDao() {
        return (GeneroDao)crearDAO(GeneroDaoImpl.class);
    } 
    
    public static EspecieDao crearEspecieDao() {
        return (EspecieDao)crearDAO(EspecieDaoImpl.class);
    } 
    
     public static GrupoDao crearGrupoDao() {
        return (GrupoDao)crearDAO(GrupoDaoImpl.class);
    }

    public static RecoleccionDao crearRecoleccionDao() {
        return (RecoleccionDao)crearDAO(RecoleccionDaoImpl.class);
    } 
    
    public static NacionalDao crearNacionalDao() {
        return (NacionalDao)crearDAO(NacionalDaoImpl.class);
    } 

    public static InternacionalDao crearInternacionalDao() {
        return (InternacionalDao)crearDAO(InternacionalDaoImpl.class);
    } 

    public static TerrestreDao crearTerrestreDao() {
        return (TerrestreDao)crearDAO(TerrestreDaoImpl.class);
    } 

    public static EtiquetaDao crearEtiquetaDao() {
        return (EtiquetaDao)crearDAO(EtiquetaDaoImpl.class);
    } 
    
    public static AcuaticoDao crearAcuaticoDao() {
        return (AcuaticoDao)crearDAO(AcuaticoDaoImpl.class);
    } 

    public static ZonaDao crearZonaDao() {
        return (ZonaDao)crearDAO(ZonaDaoImpl.class);
    } 
    
    public static RecolectorDao crearRecolectorDao() {
        return (RecolectorDao)crearDAO(RecolectorDaoImpl.class);
    } 
    
    public static MunicipioDao crearMunicipioDao() {
        return (MunicipioDao)crearDAO(MunicipioDaoImpl.class);
    } 
    
    public static DepartamentoDao crearDepartamentoDao() {
        return (DepartamentoDao)crearDAO(DepartamentoDaoImpl.class);
    } 

    public static RestauracionDao crearRestauracionDao() {
        return (RestauracionDao)crearDAO(RestauracionDaoImpl.class);
    } 

    public static ResenyaDao crearResenyaDao() {
        return (ResenyaDao)crearDAO(ResenyaDaoImpl.class);
    } 
    
    public static EspecimenDao crearEspecimenDao() {
        return (EspecimenDao)crearDAO(EspecimenDaoImpl.class);
    } 
    
    public static AnimalDao crearAnimalDao() {
        return (AnimalDao)crearDAO(AnimalDaoImpl.class);
    } 

    public static SinonimiaDao crearSinonimiaDao() {
        return (SinonimiaDao)crearDAO(SinonimiaDaoImpl.class);
    } 

    public static AreaprotegidaDao crearAreaprotegidaDao() {
        return (AreaprotegidaDao)crearDAO(AreaprotegidaDaoImpl.class);
    } 

    public static ReservaDao crearReservaDao() {
        return (ReservaDao)crearDAO(ReservaDaoImpl.class);
    } 

    public static PrivilegioDao crearPrivilegioDao() {
        return (PrivilegioDao)crearDAO(PrivilegioDaoImpl.class);
    }
    
    public static OperacionDao crearOperacionDao() {
        return (OperacionDao)crearDAO(OperacionDaoImpl.class);
    }
    
    public static ObjetoDao crearObjetoDao() {
        return (ObjetoDao)crearDAO(ObjetoDaoImpl.class);
    }
    
    private static GenericoDAO crearDAO(Class clase) {
        GenericoDAO instancia = null;
        
        try {
            instancia = (GenericoDAO)clase.newInstance();
        } catch (InstantiationException ex) {
            Logger.getLogger(FabricaDAO.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(FabricaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            return instancia;
        }
    }
    
}
